Распаковать содержимое этого архива в папку llvm/lib с заменой. Затем собрать LLVM. Unix: Находясь в папке с собранными исполняемыми файлами, выполнить: ./clang -c -emit-llvm -o <имя выходного файла>.bc <имя входного файла>.c - получение биткода (можно llvm-gcc с теми же аргументами) ./opt -load ../lib/DominatorTree.so -team5dt < <имя входного файла>.bc > <имя выходного файла>.bc - в этой же папке появятся .gv-файлы (они же dot) с ГПУ и деревьями доминаторов для каждой функции в исходном файле dot -Tps <имя входного файла>.gv -o <имя выходного файла>.ps - визуализация в файле *.ps Windows: Через какую-либо среду разработки добавить файл DominatorTree/DT.cpp к исходникам проекта Tools/opt (необязательно физически, можно подредактировать opt.vcxproj, добавив DT.cpp к компилируемым файлам) Находясь в папке с собранными исполняемыми файлами, выполнить: clang -c -emit-llvm -o test.bc test.c - получение биткода (можно llvm-gcc с теми же аргументами) opt -team5dt < <имя входного файла>.bc > <имя выходного файла>.bc - в этой же папке появятся .gv-файлы (они же dot) с ГПУ и деревьями доминаторов для каждой функции в исходном файле .gv открывается с помощью GraphViz opt -dot-dom < <имя входного файла>.bc > <имя выходного файла>.bc - конструктор DominatorTree, встроенный в LLVM; позволит проверить корректность нашей реализации